export const isObject = function(value) {
	var type = typeof value;
	return value != null && (type == 'object' || type == 'function');
}

export const isString = function(value) {
	return typeof value == 'string' ||
		(!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
}

let hasOwn = {}.hasOwnProperty;
export const isPlainObject = function(obj) {
	var key;
	if (!obj || typeof obj !== "object" || obj.nodeType) {
		return false;
	}
	try {
		if (obj.constructor &&
			!hasOwn.call(obj, "constructor") &&
			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
			return false;
		}
	} catch (e) {
		return false;
	}
	for (key in obj) {}
	return key === undefined || hasOwn.call(obj, key);
}
